$Description$
给定平面上的一些点,求这些点能组成的所有三角形的面积之和
$Solution$
以下向量的叉积运算用$\;\,\hat{}\;\,$符号表示
$\sum S_{\triangle}$为$\sum\limits_{i<j<k}|(\vec{j}-\vec{i})~\hat{}~(\vec{k}-\vec{i})|$
我们先枚举$i$,并求出其他每个点以$i$为原点的坐标
这样对于每个点$~i~$要求的就变成了$\sum\limits_{i<j<k}\left|\vec{j}\;\,\hat{}\;\,\vec{k}\right|$,我们发现有个绝对值很难处理,于是我们想让绝对值中间的叉积运算为正。
$\vec{i}\;\,\hat{}\;\,\vec{j}$只有当$~\vec{i}~$在$~\vec{j}$逆时针方向是才会是正的,所以我们在枚举$~i~$后对所有的的向量进行极角排序,原式的绝对值就消去了。
这样原式就变成了$\sum\limits_{i<j<k}(\vec{j}\;\,\hat{}\;\,\vec{k})$
再把叉积化成一般形式$:\sum\limits_{i=1}^{n}\sum\limits_{j=i+1}^{n}\sum\limits_{k=j+1}^{n}(x_{j}\times y_{k}-y_{j}\times x_{k} )$
$\qquad\qquad\qquad\quad\;\;\,=\sum\limits_{i=1}^{n}\sum\limits_{j=i+1}^{n}(x_{j}\times \sum\limits_{k=j+1}^{n} y_{k}-y_{j}\times\sum\limits_{k=j+1}^{n} x_{k} )$
发现可以用后缀和维护
复杂度$O(n^2logn)$
$Code$
1 |
|